<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
<style>
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote {
    margin: 0;
    padding: 0;
}
body {
    font-family: "Helvetica Neue", Helvetica, "Hiragino Sans GB", Arial, sans-serif;
    font-size: 13px;
    line-height: 18px;
    color: #737373;
    background-color: white;
    margin: 10px 13px 10px 13px;
}
table {
	margin: 10px 0 15px 0;
	border-collapse: collapse;
}
td,th {	
	border: 1px solid #ddd;
	padding: 3px 10px;
}
th {
	padding: 5px 10px;	
}

a {
    color: #0069d6;
}
a:hover {
    color: #0050a3;
    text-decoration: none;
}
a img {
    border: none;
}
p {
    margin-bottom: 9px;
}
h1,
h2,
h3,
h4,
h5,
h6 {
    color: #404040;
    line-height: 36px;
}
h1 {
    margin-bottom: 18px;
    font-size: 30px;
}
h2 {
    font-size: 24px;
}
h3 {
    font-size: 18px;
}
h4 {
    font-size: 16px;
}
h5 {
    font-size: 14px;
}
h6 {
    font-size: 13px;
}
hr {
    margin: 0 0 19px;
    border: 0;
    border-bottom: 1px solid #ccc;
}
blockquote {
    padding: 13px 13px 21px 15px;
    margin-bottom: 18px;
    font-family:georgia,serif;
    font-style: italic;
}
blockquote:before {
    content:"\201C";
    font-size:40px;
    margin-left:-10px;
    font-family:georgia,serif;
    color:#eee;
}
blockquote p {
    font-size: 14px;
    font-weight: 300;
    line-height: 18px;
    margin-bottom: 0;
    font-style: italic;
}
code, pre {
    font-family: Monaco, Andale Mono, Courier New, monospace;
}
code {
    background-color: #fee9cc;
    color: rgba(0, 0, 0, 0.75);
    padding: 1px 3px;
    font-size: 12px;
    -webkit-border-radius: 3px;
    -moz-border-radius: 3px;
    border-radius: 3px;
}
pre {
    display: block;
    padding: 14px;
    margin: 0 0 18px;
    line-height: 16px;
    font-size: 11px;
    border: 1px solid #d9d9d9;
    white-space: pre-wrap;
    word-wrap: break-word;
}
pre code {
    background-color: #fff;
    color:#737373;
    font-size: 11px;
    padding: 0;
}
sup {
    font-size: 0.83em;
    vertical-align: super;
    line-height: 0;
}
* {
	-webkit-print-color-adjust: exact;
}
@media screen and (min-width: 914px) {
    body {
        width: 854px;
        margin:10px auto;
    }
}
@media print {
	body,code,pre code,h1,h2,h3,h4,h5,h6 {
		color: black;
	}
	table, pre {
		page-break-inside: avoid;
	}
}
</style>
<title>APP与服务端接口</title>

</head>
<body>
<h1>APP与服务端接口</h1>

<h2>用户管理</h2>

<h3>用户登录</h3>

<h4>请求说明</h4>

<p>http请求方式：<code>post</code></p>

<pre><code>http://api.domain.com/user/tickets
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{ "phone": "1821821922", "password": "123456"}
</code></pre>

<h4>参数说明</h4>

<table>
<thead>
<tr>
<th>参数 </th>
<th> 必须 </th>
<th> 说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>type </td>
<td> 是  </td>
<td> App登录发送的请求类型，0表示手机号登录，1表示用户名和密码登录</td>
</tr>
<tr>
<td>phone </td>
<td> 否  </td>
<td> 用户登录的手机号</td>
</tr>
<tr>
<td>username </td>
<td> 否 </td>
<td> 用户登录的用户名，默认为手机号码</td>
</tr>
<tr>
<td>password </td>
<td> 否 </td>
<td> 用户登录的密码</td>
</tr>
</tbody>
</table>


<h4>返回说明</h4>

<pre><code>{
    "code": 0,
    "msg": "success",
    "data": {
        "token":"623ca3c5-254e-4dc7-a916-f436707d8de0",
        "expires":1415346248,
        "userinfo":{
            "id":"xxx",
            "username":"xxx",
            "id_card":"xxx",
            "school_id":"xx",
            "phone":"xxx",
            "gender":0/1,//0-&gt;男 1-&gt;女
            "name":"xx"//真实姓名
            }
        }
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
<tr>
<td>token </td>
<td> 返回令牌</td>
</tr>
<tr>
<td>expires </td>
<td> 令牌到期时间</td>
</tr>
<tr>
<td>userinfo </td>
<td> 用户相关信息</td>
</tr>
</tbody>
</table>


<h3>添加学生信息</h3>

<h4>请求说明</h4>

<pre><code>当前登录用户添加的学生，默认为该学生的主家长
</code></pre>

<p>http请求方式：<code>post</code></p>

<pre><code>http://api.domain.com/student/create?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    family_id:"xxxx",// 家庭id
    name:"xxx",
    gender:0/1,
    school_id:"xxx",
    grade_guid:"xxx",
    class_guid:"xxx",
    spell:"xxx",
    birthday:"xx",
    enrol_time:"2010-09-10"
}
</code></pre>

<h4>参数说明</h4>

<table>
<thead>
<tr>
<th>参数 </th>
<th> 必须 </th>
<th> 说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>family_id </td>
<td> 是 </td>
<td> 家庭id</td>
</tr>
<tr>
<td>name </td>
<td> 是  </td>
<td> 用户户名称</td>
</tr>
<tr>
<td>gender </td>
<td> 否  </td>
<td> 用户性别 0=》女 1=》男</td>
</tr>
<tr>
<td>school_id </td>
<td> 是 </td>
<td> 学校id</td>
</tr>
<tr>
<td>grade_guid </td>
<td> 否 </td>
<td> 年级guid</td>
</tr>
<tr>
<td>class_guid </td>
<td> 否 </td>
<td> 班级guid</td>
</tr>
<tr>
<td>enrol_time </td>
<td> 否 </td>
<td> 入学时间</td>
</tr>
<tr>
<td>spell </td>
<td> 否 </td>
<td> 姓名拼音</td>
</tr>
</tbody>
</table>


<h4>返回说明</h4>

<pre><code>{
    "code": 0,
    "msg": "success",
    "data": {}
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
</tbody>
</table>


<h3>编辑学生信息</h3>

<h4>请求说明</h4>

<pre><code>为该学生的主家长才可以编辑学生
</code></pre>

<p>http请求方式：<code>post</code></p>

<pre><code>http://api.domain.com/student/update?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    id:"xxxx",
    family_id:"xxxx",// 家庭id
    name:"xxx",
    gender:0/1,
    school_id:"xxx",
    grade_guid:"xxx",
    class_guid:"xxx",
    spell:"xxx",
    birthday:"xx",
    enrol_time:"2010-09-10"
}
</code></pre>

<h4>参数说明</h4>

<table>
<thead>
<tr>
<th>参数 </th>
<th> 必须 </th>
<th> 说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>id </td>
<td> 是 </td>
<td> 学生的id</td>
</tr>
<tr>
<td>family_id </td>
<td> 是 </td>
<td> 家庭id</td>
</tr>
<tr>
<td>name </td>
<td> 是  </td>
<td> 用户户名称</td>
</tr>
<tr>
<td>gender </td>
<td> 否  </td>
<td> 用户性别 0=》女 1=》男</td>
</tr>
<tr>
<td>school_id </td>
<td> 是 </td>
<td> 学校id</td>
</tr>
<tr>
<td>grade_guid </td>
<td> 否 </td>
<td> 年级guid</td>
</tr>
<tr>
<td>class_guid </td>
<td> 否 </td>
<td> 班级guid</td>
</tr>
<tr>
<td>enrol_time </td>
<td> 否 </td>
<td> 入学时间</td>
</tr>
<tr>
<td>spell </td>
<td> 否 </td>
<td> 姓名拼音</td>
</tr>
</tbody>
</table>


<h4>返回结果</h4>

<pre><code>{
    "code": 0,
    "msg": "success",
    "data": {}
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
</tbody>
</table>


<h3>删除学生</h3>

<h4>请求说明</h4>

<pre><code>当前登录用户为该学生的主家长才可以删除
</code></pre>

<p>http请求方式：<code>post</code></p>

<pre><code>http://api.domain.com/student/delete?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    student_id:"xxx"
}
</code></pre>

<h4>参数说明</h4>

<table>
<thead>
<tr>
<th>参数 </th>
<th> 必须 </th>
<th> 说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>student_id </td>
<td> 是  </td>
<td> 学生的id</td>
</tr>
</tbody>
</table>


<h4>返回结果</h4>

<pre><code>{
    "code": 0,
    "msg": "success",
    "data": {}
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
</tbody>
</table>


<h3>获取学生列表</h3>

<h4>请求说明</h4>

<pre><code>获得当前登录家长所有看管的学生
</code></pre>

<p>http请求方式： <code>post</code>
    http://api.domain.com/student/list?token=TOKEN
请求包结构体为:</p>

<pre><code>{
    user_id:"xxx"
}   
</code></pre>

<h4>返回说明</h4>

<pre><code>{
    "code":0,
    "msg":"success",
    "data":{
        {
            id:"xxxx",
            family_id:"xxxx",// 家庭id
            name:"xxx",
            gender:0/1,
            school_id:"xxx",
            grade_guid:"xxx",
            class_guid:"xxx",
            spell:"xxx",
            birthday:"xx",
            enrol_time:"2010-09-10",
            card_id:"xxx"
        },
        {
            id:"xxxx",
            family_id:"xxxx",// 家庭id
            name:"xxx",
            gender:0/1,
            school_id:"xxx",
            grade_guid:"xxx",
            class_guid:"xxx",
            spell:"xxx",
            birthday:"xx",
            enrol_time:"2010-09-10",
            card_id:"xxx"
        },
        //....
    }
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
<tr>
<td>id</td>
<td> 学生的id</td>
</tr>
<tr>
<td>family_id </td>
<td> 家庭id</td>
</tr>
<tr>
<td>name </td>
<td>  用户户名称</td>
</tr>
<tr>
<td>gender </td>
<td> 用户性别 0=》女 1=》男</td>
</tr>
<tr>
<td>school_id </td>
<td> 学校id</td>
</tr>
<tr>
<td>grade_guid </td>
<td>  年级guid</td>
</tr>
<tr>
<td>class_guid </td>
<td> 班级guid</td>
</tr>
<tr>
<td>enrol_time </td>
<td> 入学时间</td>
</tr>
<tr>
<td>spell </td>
<td>  姓名拼音</td>
</tr>
<tr>
<td>card_id </td>
<td> 卡号</td>
</tr>
</tbody>
</table>


<h3>获取学校列表</h3>

<h4>请求说明</h4>

<p>http请求方式： <code>get</code>
    http://api.domain.com/school/list?token=TOKEN</p>

<h4>返回说明</h4>

<pre><code>{
    "code":0,
    "msg":"success",
    "data":{
        {
            id:"xxxx",
            name:"xxx"
        },
        {
            id:"xxxx",
            name:"xxx"
        },
        //....
    }
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
<tr>
<td>id</td>
<td> 学校的id</td>
</tr>
<tr>
<td>name </td>
<td> 学校的名称</td>
</tr>
</tbody>
</table>


<h3>更新/添加 学生的相关家长信息关系</h3>

<h4>请求说明</h4>

<pre><code>只有该登陆家长为学生的主家长时才可以修改
</code></pre>

<p>http请求方式： <code>post</code></p>

<pre><code>http://api.domain.com/relation/update?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    student_id："xxx",
    uid:"xxx",
    relation:"xxx"
}
</code></pre>

<h4>参数说明</h4>

<table>
<thead>
<tr>
<th>参数 </th>
<th> 必须 </th>
<th> 说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>student_id </td>
<td> 是  </td>
<td> 学生的id</td>
</tr>
<tr>
<td>uid </td>
<td> 是 </td>
<td> 家长的id （不一定是该登陆家长的id，可能是其他副家长的id）</td>
</tr>
<tr>
<td>relation </td>
<td> 是 </td>
<td> 家长与学生的关系</td>
</tr>
</tbody>
</table>


<h4>返回说明</h4>

<pre><code>{
    "code": 0,
    "msg": "success",
    "data": {}
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
</tbody>
</table>


<h3>删除学生与家长之间的关系</h3>

<h4>请求说明</h4>

<pre><code>只有该登陆家长为学生的主家长时才可以修改
</code></pre>

<p>http请求方式： <code>post</code></p>

<pre><code>http://api.domain.com/relation/delete?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    student_id："xxx",
    uid:"xxx"
}
</code></pre>

<h4>参数说明</h4>

<table>
<thead>
<tr>
<th>参数 </th>
<th> 必须 </th>
<th> 说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>student_id </td>
<td> 是  </td>
<td> 学生的id</td>
</tr>
<tr>
<td>uid </td>
<td> 是 </td>
<td> 家长的id （不一定是该登陆家长的id，可能是其他副家长的id）</td>
</tr>
</tbody>
</table>


<h4>返回说明</h4>

<pre><code>{
    "code": 0,
    "msg": "success",
    "data": {}
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
</tbody>
</table>


<h3>添加用户</h3>

<h4>请求说明</h4>

<pre><code>只有登录用户为主家长才可以添加副家长
</code></pre>

<p>http请求方式：<code>post</code></p>

<pre><code>http://api.domain.com/user/create?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    "family_id": 1,
    "username": "1821821922",
    "password": "123456",
    "phone": "1821821922",
    "id_card": "421003198008050171",
    "gender": 0,
    "spell":"xxx",
    "school_guid":"xxx"


}
</code></pre>

<h4>参数说明</h4>

<table>
<thead>
<tr>
<th>参数 </th>
<th> 必须 </th>
<th> 说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>family_id</td>
<td>是</td>
<td>家庭的id</td>
</tr>
<tr>
<td>username </td>
<td> 否 </td>
<td> 用户名</td>
</tr>
<tr>
<td>password </td>
<td> 是 </td>
<td> app登录密码</td>
</tr>
<tr>
<td>id_card </td>
<td> 否 </td>
<td> 用户身份证编号</td>
</tr>
<tr>
<td>gender </td>
<td> 否 </td>
<td> 0、1</td>
</tr>
<tr>
<td>spell </td>
<td>  否 </td>
<td> 姓名拼音</td>
</tr>
<tr>
<td>school_guid </td>
<td>  否 </td>
<td> 学校的guid</td>
</tr>
</tbody>
</table>


<h4>返回说明</h4>

<pre><code>{
    "code": 0,
    "msg": "success",
    "data": {}
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
</tbody>
</table>


<h3>修改家长信息</h3>

<h4>请求说明</h4>

<pre><code>主家长可以修改自己信息以及其添加的副家长信息，或者副家长修改自己的信息
</code></pre>

<p>http请求方式：<code>post</code></p>

<pre><code>http://api.domain.com/user/update?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    "id": 1,
    "family_id": 1,
    "username": "1821821922",
    "password": "123456",
    "phone": "1821821922",
    "id_card": "421003198008050171",
    "gender": 0,
    "spell":"xxx",
    "school_guid":"xxx"
}
</code></pre>

<h4>参数说明</h4>

<table>
<thead>
<tr>
<th>参数 </th>
<th> 必须 </th>
<th> 说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>id </td>
<td> 是 </td>
<td> 家长的id</td>
</tr>
<tr>
<td>family_id</td>
<td> 否 </td>
<td>家庭的id</td>
</tr>
<tr>
<td>username </td>
<td> 否 </td>
<td> 用户名</td>
</tr>
<tr>
<td>password </td>
<td> 是 </td>
<td> app登录密码</td>
</tr>
<tr>
<td>id_card </td>
<td> 否 </td>
<td> 用户身份证编号</td>
</tr>
<tr>
<td>gender </td>
<td> 否 </td>
<td> 0、1</td>
</tr>
<tr>
<td>spell </td>
<td>  否 </td>
<td> 姓名拼音</td>
</tr>
<tr>
<td>school_guid </td>
<td>  否 </td>
<td> 学校的guid</td>
</tr>
</tbody>
</table>


<h4>返回说明</h4>

<pre><code>{
    "code": 0,
    "msg": "success",
    "data": {}
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
</tbody>
</table>


<h3>删除家长</h3>

<h4>请求说明</h4>

<pre><code>删除自己添加的副家长
</code></pre>

<p>http请求方式：<code>post</code></p>

<pre><code>http://api.domain.com/user/delete?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    "family_id": "xxxxx",
    "user_id": "xxxx"
}
</code></pre>

<h4>参数说明</h4>

<table>
<thead>
<tr>
<th>参数 </th>
<th> 必须 </th>
<th> 说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>family_id </td>
<td> 是 </td>
<td> 家庭的id</td>
</tr>
<tr>
<td>user_id </td>
<td> 是 </td>
<td> 副家长的id</td>
</tr>
</tbody>
</table>


<h4>返回说明</h4>

<pre><code>{
    "code": 0,
    "msg": "success",
    "data": {}
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
</tbody>
</table>


<h3>获得家庭的所有的家长信息</h3>

<h4>请求说明</h4>

<p>http请求方式：<code>post</code></p>

<pre><code>http://api.domain.com/user/get_vice_user?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    family_id:xxx  //家庭的id
} 
</code></pre>

<h4>data数据返回说明</h4>

<pre><code>{
    {
        "uid":"xxx",
        "family_id": 1,
        "username": "1821821922",
        "password": "123456",
        "phone": "1821821922",
        "id_card": "421003198008050171",
        "gender": 0,
        "spell":"xxx",
        "school_guid":"xxx",
        "type":0/1
    },
    {
        "uid":"xxx",
        "family_id": 1,
        "username": "1821821922",
        "password": "123456",
        "phone": "1821821922",
        "id_card": "421003198008050171",
        "gender": 0,
        "spell":"xxx",
        "school_guid":"xxx",
        "type":0/1
    },
    //....
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>code </td>
<td>  错误代码，0代代表没有错误</td>
</tr>
<tr>
<td>msg </td>
<td>  描述信息</td>
</tr>
<tr>
<td>data </td>
<td> 响应数据</td>
</tr>
<tr>
<td>uid </td>
<td> 家长的id</td>
</tr>
<tr>
<td>family_id</td>
<td> 家庭的id</td>
</tr>
<tr>
<td>username </td>
<td> 用户名</td>
</tr>
<tr>
<td>password </td>
<td> app登录密码</td>
</tr>
<tr>
<td>id_card </td>
<td> 用户身份证编号</td>
</tr>
<tr>
<td>gender </td>
<td> 0、1</td>
</tr>
<tr>
<td>spell </td>
<td>  姓名拼音</td>
</tr>
<tr>
<td>school_guid </td>
<td> 学校的guid</td>
</tr>
<tr>
<td>type </td>
<td> 是否为家庭管理员 0/否 1/是</td>
</tr>
</tbody>
</table>


<h2>信息管理</h2>

<h3>获得到校推送信息</h3>

<h4>请求说明</h4>

<p>http请求方式：<code>get</code></p>

<pre><code>http://api.domain.com/message/list?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    "card_id": "xxxxx",
    "year": "xxxx",  //2015
    "month": "xxxx", //03
    "day":"xx"   //11
}       
</code></pre>

<h4>data数据返回说明</h4>

<pre><code>{
{
    "id":xx,
    "time":"2014-12-11 09:35:18"
},
{
    "id":xx,
    "time":"2014-12-11 09:35:18"
},
{
    "id":xx,
    "time":"2014-12-11 09:35:18"
}

//....
}
</code></pre>

<table>
<thead>
<tr>
<th>参数 </th>
<th>  说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>id </td>
<td> 时间点id</td>
</tr>
<tr>
<td>time</td>
<td>时间信息</td>
</tr>
</tbody>
</table>


<h3>获得到校时间点图片信息</h3>

<h4>请求说明</h4>

<p>http请求方式：<code>post</code></p>

<pre><code>http://api.domain.com/image?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    "id": "123" //时间点id
}
</code></pre>

<h4>data数据返回说明</h4>

<pre><code>{
    "http://img.domain.com/xxxxx.png",
    "http://img.domain.com/xxxxx.png",
    "http://img.domain.com/xxxxx.png",
    //.....
}
</code></pre>

<h2>信息通知</h2>

<h3>传送device_token与用户信息</h3>

<h4>请求说明</h4>

<pre><code>用户登录成功后，会传回具体的用户与设备标示信息
</code></pre>

<p>http请求方式：<code>post</code></p>

<pre><code>http://api.domain.com/device?token=TOKEN
</code></pre>

<p>请求包结构体为:</p>

<pre><code>{
    "device_token":"1cb6d299 cb7ab6ca 44ddcc28 36872059 d78b21ab 6cf638af 900dad2d b61fe8eb",
    "user_id":"xxx"
}
</code></pre>

<h4>参数说明</h4>

<table>
<thead>
<tr>
<th>参数 </th>
<th> 必须 </th>
<th> 说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>device_token </td>
<td> 是 </td>
<td> 设备标示</td>
</tr>
<tr>
<td>user_id </td>
<td> 是 </td>
<td> 用户id</td>
</tr>
</tbody>
</table>


<h3>信息推送其它相关说明</h3>

<ul>
<li><p>node.js 现有的实现的npm包，地址：https://github.com/logicalparadox/apnagent-playground，需要平叔将其集成到express中</p></li>
<li><p>该模块包中需要的证书文件<code>pfx.p12</code>由IOS端给出，（附件中）</p></li>
<li><p>服务端的主要工作</p>

<p>  1.接受客户端每次登陆后传回的设备标示，并关联到特定登录用户</p>

<p>  2.设备有新的信息发送到服务端时，服务端先匹配都特定用户，然后再通过用户找到关联的设备标示，将信息推送到APNS服务器</p>

<p>  3.服务端需要过一段时间从apns服务器上获取有效的设备标示（因为当部分用户安装app后再卸载，那它的设备标示便无效了。注意：一个ios客户端的设备标示并不是固定的）。然后比对自己服务器上的设备标示信息，删除无效的设备标示</p></li>
</ul>


<p>关于node.js实现推送的包的使用，（该包中封装了对APNS服务端SOCKET通信的低级接口，实现更加方便进行信息推送，与服务端设备标示的获取。本地测试均正常）</p>
</body>
</html>